import { _HttpClient } from '@delon/theme';
import { Injectable } from '@angular/core';
import { QueryOptions } from 'src/app/project/model/common/query-options';
import { Observable } from 'rxjs';
import { ApiPagedData } from 'src/app/project/model/common/api-paged-data';
import { AcademyDTO } from 'src/app/project/model/icm/icm-base/academy/academy.dto';
import { ApiSimpleData } from 'src/app/project/model/common/api-simple-data';

@Injectable({
  providedIn: 'root',
})
export class AcademyService {
  private static URL = '/api/icm-academy';

  constructor(private http: _HttpClient) {}

  /**
   * 分页查询学院信息
   * @param option 分页参数
   * @param name 学院信息名称
   * @param code 学院信息编码
   */
  findOnePage(option: QueryOptions, name?: string, code?: string): Observable<ApiPagedData<AcademyDTO>> {
    const params = {};
    Object.assign(params, option, name ? { name } : {}, code ? { code } : {});
    return this.http.get<ApiPagedData<AcademyDTO>>(AcademyService.URL, params);
  }

  /**
   * 新增学院信息
   */
  create(academyInfo: AcademyDTO): Observable<AcademyDTO> {
    return this.http.post<AcademyDTO>(AcademyService.URL, academyInfo);
  }

  /**
   * 提交学院信息修改数据
   * @param id 学院信息Id
   * @param editInfo 学院信息
   */
  complete(id: string, editInfo: AcademyDTO): Observable<AcademyDTO> {
    return this.http.put<AcademyDTO>(`${AcademyService.URL}/${id}`, editInfo);
  }

  /**
   * 通过id查找学院信息信息
   * @param id 学院信息Id
   * @param isGetProfession  是否获取专业
   */
  findById(id: string, isGetProfession: boolean): Observable<AcademyDTO> {
    const params = {};
    Object.assign(params, isGetProfession !== null ? { isGetProfession } : {});
    return this.http.get<AcademyDTO>(`${AcademyService.URL}/${id}`, params);
  }

  /**
   * 删除学院信息
   * @param id 学院信息id
   */
  delete(id: string): Observable<any> {
    return this.http.delete(`${AcademyService.URL}/${id}`);
  }

  /**
   * 查找所有学院信息
   */
  findAll(): Observable<Array<AcademyDTO>> {
    return this.http.get<Array<AcademyDTO>>(`${AcademyService.URL}/all`);
  }

  /**
   * 查找所有学院信息并排序
   * @param param 排序参数
   * @param pattern 排序模式：asc/desc
   */
  findAllBySort(param: string, pattern: string): Observable<Array<AcademyDTO>> {
    const params = {};
    Object.assign(params, param ? { param } : {}, pattern ? { pattern } : {});
    return this.http.get<Array<AcademyDTO>>(`${AcademyService.URL}/all/sort`, params);
  }

  /**
   * 根据学院信息id，检查学院信息code是否已存在
   * @param code 学院信息
   */
  checkoutCodeIsExist(code: string): Observable<ApiSimpleData<boolean>> {
    const params = {};
    Object.assign(params, code ? { code } : {});
    return this.http.get<ApiSimpleData<boolean>>(`${AcademyService.URL}/only`, params);
  }

  /**
   * 统计学院数量
   */
  count(): Observable<number> {
    return this.http.get<number>(`${AcademyService.URL}/count`);
  }
}
